home *** CD-ROM | disk | FTP | other *** search
/ Linux Cubed Series 7: Sunsite / Linux Cubed Series 7 - Sunsite Vol 1.iso / system / filesyst / ext2 / ext2ed-0.000 / ext2ed-0 / ext2ed-0.1 / ext2ed.h < prev    next >
C/C++ Source or Header  |  1995-08-24  |  14KB  |  438 lines

  1.  
  2. /*
  3.  
  4. /usr/src/ext2ed/ext2ed.h
  5.  
  6. A part of the extended file system 2 disk editor.
  7.  
  8. --------------------------------------
  9. Include file for the ext2 disk editor.
  10. --------------------------------------
  11.  
  12. This file contains declarations which are needed by all the files in ext2ed.
  13.  
  14. First written on: April 9 1995
  15.  
  16. Copyright (C) 1995 Gadi Oxman
  17.  
  18. */
  19.  
  20. #ifndef EXT2ED_EDITOR_H
  21. #define EXT2ED_EDITOR_H
  22.  
  23. /*
  24.  
  25. -----------------------
  26.  User definable options
  27. -----------------------
  28.  
  29. */
  30.  
  31. #ifndef VAR_DIR
  32.     #define VAR_DIR    "/var/lib/ext2ed"        /* The configuration file will be searched here */
  33. #endif
  34.  
  35. #define DEBUG                        /* Activate self-sanity checks */
  36.  
  37. #include <linux/ext2_fs.h>                /* Main kernel ext2 include file */
  38. #include <linux/stat.h>
  39.  
  40. #ifdef OLD_NCURSES                    /* The ncurses interface */
  41.     #include <ncurses/ncurses.h>
  42. #else
  43.     #include <ncurses/curses.h>
  44. #endif
  45.  
  46. #define MAX_FIELDS         400
  47.  
  48. #define MAX_COMMAND_LINE     81
  49. #define MAX_COMMANDS_NUM    30            /* Maximum number of commands of one type */
  50. #define REMEMBER_COUNT        30            /* Object memory size */
  51.  
  52. /* 
  53.     The user screen consists of four parts:
  54.  
  55.         1.    Title window (title_win).
  56.         2.    Show (status) window (show_win).
  57.         3.    Main show pad (show_pad).
  58.         4.    Command window (command_win).
  59.     
  60. */
  61.  
  62. /*
  63.  
  64.    The show pad is mapped to the space left between the other three windows.
  65.  
  66.    If you wondered why ext2ed grabs so memory, the answer is probably below - I wanted to treat
  67.    the virtual display as infinite. Decrease the following for more realistic memory consumption.
  68.  
  69. */
  70.  
  71. #define SHOW_PAD_LINES 3000
  72. #define SHOW_PAD_COLS (COLS > 140 ? COLS : 140)
  73.  
  74. #define COMMAND_WIN_LINES 6                /* Change this to your preferences */
  75. #define TITLE_WIN_LINES 3
  76. #define SHOW_WIN_LINES 3
  77.  
  78. #define HEX 1
  79. #define TEXT 2
  80.  
  81. #ifndef EXT2_PRE_02B_MAGIC
  82.     #define EXT2_PRE_02B_MAGIC    0xEF51
  83. #endif
  84.  
  85.  
  86. typedef void (*PF) (char *);                /* Used to point to the dispatched functions */
  87.  
  88. struct struct_commands {                /* Holds commands of an object */
  89.     int last_command;
  90.     char *names [MAX_COMMANDS_NUM];
  91.     char *descriptions [MAX_COMMANDS_NUM];
  92.     PF callback [MAX_COMMANDS_NUM];
  93. };
  94.  
  95. struct struct_descriptor {                /* Describes an object */
  96.     unsigned long length;
  97.     unsigned char name [60];
  98.     unsigned short fields_num;
  99.     unsigned char field_names [MAX_FIELDS][80];
  100.     unsigned short field_lengths [MAX_FIELDS];
  101.     unsigned short field_positions [MAX_FIELDS];
  102.     struct struct_commands type_commands;
  103.     struct struct_descriptor *prev,*next;
  104. };
  105.  
  106. struct struct_type_data {                /* The object's data is usually here */
  107.     long offset_in_block;
  108.  
  109.     union union_type_data {                /* Format it in various ways */
  110.         char buffer [EXT2_MAX_BLOCK_SIZE];
  111.         struct ext2_acl_header t_ext2_acl_header;
  112.         struct ext2_acl_entry t_ext2_acl_entry;
  113.         struct ext2_group_desc t_ext2_group_desc;
  114.         struct ext2_inode t_ext2_inode;
  115.         struct ext2_super_block t_ext2_super_block;
  116.         struct ext2_dir_entry t_ext2_dir_entry;
  117.     } u;
  118. };
  119.  
  120. struct struct_file_system_info {            /* Important information about the filesystem */
  121.     unsigned long long file_system_size;
  122.     unsigned long super_block_offset;
  123.     unsigned long first_group_desc_offset;
  124.     unsigned long groups_count;
  125.     unsigned long inodes_per_block;
  126.     unsigned long blocks_per_group;            /* The name is misleading; beware */
  127.     unsigned long no_blocks_in_group;
  128.     unsigned short block_size;
  129.     struct ext2_super_block super_block;
  130. };
  131.  
  132. struct struct_file_info {                /* Used to handle files and directories */
  133.  
  134.     struct ext2_inode *inode_ptr;
  135.     
  136.     long inode_offset;
  137.     long global_block_num,global_block_offset;
  138.     long block_num,blocks_count;
  139.     long file_offset,file_length;
  140.     long level;
  141.     unsigned char buffer [EXT2_MAX_BLOCK_SIZE];
  142.     long offset_in_block;
  143.  
  144.     int display;
  145.     /* The following is used if the file is a directory */
  146.     
  147.     long dir_entry_num,dir_entries_count;
  148.     long dir_entry_offset;
  149. };
  150.  
  151. struct struct_super_info {                /* Used to handle the superblock */
  152.     unsigned long copy_num;
  153. };
  154.  
  155. struct struct_group_info {                /* Used to handle the group descriptors */
  156.     unsigned long copy_num;
  157.     unsigned long group_num;
  158. };
  159.  
  160. struct struct_block_bitmap_info {            /* Used in blockbitmap_com.c */
  161.     unsigned long entry_num;
  162.     unsigned long group_num;
  163. };
  164.  
  165. struct struct_inode_bitmap_info {            /* Used in inodebitmap_com.c */
  166.     unsigned long entry_num;
  167.     unsigned long group_num;
  168. };
  169.  
  170. struct struct_remember_lifo {                /* Implements the objects circular memory */
  171.     long entries_count;
  172.  
  173.     long offset [REMEMBER_COUNT];
  174.     struct struct_descriptor *type [REMEMBER_COUNT];
  175.     char name [REMEMBER_COUNT][80];
  176. };
  177.  
  178. struct struct_pad_info {                /* Used to zoom into the pad window */
  179.     int display_lines,display_cols;
  180.     int line,col;
  181.     int max_line,max_col;
  182.     int disable_output;
  183. };
  184.  
  185. /* Global variables (defined mostly in main.c) */
  186.  
  187. /* Configurable variables (Through configuration file) */
  188.  
  189. extern char AlternateDescriptors [200];
  190. extern char Ext2Descriptors [200];
  191. extern char LogFile [200];
  192. extern int LogChanges;
  193. extern int AllowChanges;
  194. extern int AllowMountedRead;
  195. extern int ForceExt2;
  196. extern int DefaultBlockSize;
  197. extern unsigned long DefaultTotalBlocks;
  198. extern unsigned long DefaultBlocksInGroup;
  199. extern int ForceDefault;
  200.  
  201. extern char device_name [80];
  202. extern char last_command_line [80];
  203. extern FILE *device_handle;
  204. extern long device_offset;
  205. extern int  mounted;
  206.  
  207. extern short block_size;
  208. extern struct struct_commands general_commands;
  209. extern struct struct_commands ext2_commands;
  210. extern struct struct_descriptor *first_type;
  211. extern struct struct_descriptor *last_type;
  212. extern struct struct_descriptor *current_type;
  213. extern struct struct_type_data type_data;
  214. extern struct struct_file_system_info file_system_info;
  215. extern struct struct_file_info file_info,first_file_info;
  216. extern struct struct_group_info group_info;
  217. extern struct struct_super_info super_info;
  218. extern struct struct_block_bitmap_info block_bitmap_info;
  219. extern struct struct_inode_bitmap_info inode_bitmap_info;
  220. extern struct struct_remember_lifo remember_lifo;
  221. extern struct struct_pad_info show_pad_info;
  222. extern int write_access;
  223.  
  224. extern int redraw_request;
  225. extern char lines_s [80];
  226. extern char cols_s [80];
  227.  
  228.  
  229. /* init.c */
  230.  
  231. extern int init (void);
  232. extern void prepare_to_close (void);
  233. extern int set_struct_descriptors (char *file_name);
  234. extern void free_struct_descriptors (void);
  235. extern struct struct_descriptor *add_new_descriptor (char *name);
  236. extern void add_new_variable (struct struct_descriptor *descriptor,char *v_type,char *v_name);
  237. extern void fill_type_commands (struct struct_descriptor *ptr);
  238. extern void add_user_command (struct struct_commands *ptr,char *name,char *description,PF callback);
  239. extern void free_user_commands (struct struct_commands *ptr);
  240. extern int set_file_system_info (void);
  241. extern int process_configuration_file (void);
  242. extern void add_general_commands (void);
  243. extern void add_ext2_general_commands (void);
  244. extern void check_mounted (char *name);
  245.  
  246. int get_next_option (FILE *fp,char *option,char *value);
  247. void init_readline (void);
  248. void init_signals (void);
  249. void signal_SIGWINCH_handler (int sig_num);
  250. void signal_SIGTERM_handler (int sig_num);
  251. void signal_SIGSEGV_handler (int sig_num);
  252.  
  253. /* general_com.c */
  254.  
  255. /* General commands which are aviable always */
  256.  
  257. extern void help (char *command_line);
  258. extern void set (char *command_line);
  259. extern void set_device (char *command_line);
  260. extern void set_offset (char *command_line);
  261. extern void set_type (char *command_line);
  262. extern void show (char *command_line);
  263. extern void pgup (char *command_line);
  264. extern void pgdn (char *command_line);
  265. extern void redraw (char *command_line);
  266. extern void remember (char *command_line);
  267. extern void recall (char *command_line);
  268. extern void cd (char *command_line);
  269. extern void enable_write (char *command_line);
  270. extern void disable_write (char *command_line);
  271. extern void write_data (char *command_line);
  272. extern void next (char *command_line);
  273. extern void prev (char *command_line);
  274.  
  275. void hex_set (char *command_line);
  276. void detailed_help (char *text);
  277.  
  278.  
  279. /* ext2_com.c */
  280.  
  281. /* Extended2 filesystem genereal commands - Aviable only when editing an
  282.    ext2 filesystem */
  283.  
  284. extern void type_ext2___super (char *command_line);
  285. extern void type_ext2___group (char *command_line);
  286. extern void type_ext2___cd (char *command_line);
  287.  
  288.  
  289. /* main.c */
  290.  
  291. extern int version_major,version_minor;
  292. extern char revision_date [80];
  293. extern char email_address [80];
  294.  
  295. #ifdef DEBUG
  296. extern void internal_error (char *description,char *source_name,char *function_name);
  297. #endif
  298.  
  299. void parser (void);
  300. extern int dispatch (char *command_line);
  301. char *parse_word (char *source,char *dest);
  302. char *complete_command (char *text,int state);
  303. char *dupstr (char *src);
  304.  
  305.  
  306.  
  307. /* disk.c */
  308.  
  309. extern int load_type_data (void);
  310. extern int write_type_data (void);
  311. extern int low_read (unsigned char *buffer,unsigned long length,unsigned long offset);
  312. extern int low_write (unsigned char *buffer,unsigned long length,unsigned long offset);
  313. extern int log_changes (unsigned char *buffer,unsigned long length,unsigned long offset);
  314.  
  315. /* file_com.c */
  316.  
  317. extern int init_file_info (void);
  318. extern void type_file___show (char *command_line);
  319. extern void type_file___inode (char *command_line);
  320. extern void type_file___display (char *command_line);
  321. extern void type_file___prev (char *command_line);
  322. extern void type_file___next (char *command_line);
  323. extern void type_file___offset (char *command_line);
  324. extern void type_file___prevblock (char *command_line);
  325. extern void type_file___nextblock (char *command_line);
  326. extern void type_file___block (char *command_line);
  327. extern void type_file___remember (char *command_line);
  328. extern void type_file___set (char *command_line);
  329. extern void type_file___writedata (char *command_line);
  330.  
  331. extern long file_block_to_global_block (long file_block,struct struct_file_info *file_info_ptr);
  332. extern long return_indirect (long table_block,long block_num);
  333. extern long return_dindirect (long table_block,long block_num);
  334. extern long return_tindirect (long table_block,long block_num);
  335.  
  336. void file_show_hex (void);
  337. void file_show_text (void);
  338. void show_status (void);
  339.  
  340. /* inode_com.c */
  341.  
  342. extern void type_ext2_inode___next (char *command_line);
  343. extern void type_ext2_inode___prev (char *command_line);
  344. extern void type_ext2_inode___show (char *command_line);
  345. extern void type_ext2_inode___group (char *command_line);
  346. extern void type_ext2_inode___entry (char *command_line);
  347. extern void type_ext2_inode___file (char *command_line);
  348. extern void type_ext2_inode___dir (char *command_line);
  349.  
  350. extern long inode_offset_to_group_num (long inode_offset);
  351. extern long int inode_offset_to_inode_num (long inode_offset);
  352. extern long int inode_num_to_inode_offset (long inode_num);
  353.  
  354. /* dir_com.c */
  355.  
  356. extern int init_dir_info (struct struct_file_info *info);
  357. extern void type_dir___show (char *command_line);
  358. extern void type_dir___inode (char *command_line);
  359. extern void type_dir___pgdn (char *command_line);
  360. extern void type_dir___pgup (char *command_line);
  361. extern void type_dir___prev (char *command_line);
  362. extern void type_dir___next (char *command_line);
  363. extern void type_dir___followinode (char *command_line);
  364. extern void type_dir___remember (char *command_line);
  365. extern void type_dir___cd (char *command_line);
  366. extern void type_dir___entry (char *command_line);
  367. extern void type_dir___writedata (char *command_line);
  368. extern void type_dir___set (char *command_line);
  369.  
  370. #define HEX 1
  371. #define TEXT 2
  372.  
  373. #define ABORT        0
  374. #define CONTINUE    1
  375. #define FOUND        2
  376.  
  377. struct struct_file_info search_dir_entries (int (*action) (struct struct_file_info *info),int *status);
  378. int action_count (struct struct_file_info *info);
  379. void show_dir_status (void);
  380. long count_dir_entries (void);
  381. int action_name (struct struct_file_info *info);
  382. int action_entry_num (struct struct_file_info *info);
  383. int action_show (struct struct_file_info *info);
  384.  
  385. /* super_com.c */
  386.  
  387. extern void type_ext2_super_block___show (char *command_line);
  388. extern void type_ext2_super_block___gocopy (char *command_line);
  389. extern void type_ext2_super_block___setactivecopy (char *command_line);
  390.  
  391. /* group_com.c */
  392.  
  393. extern void type_ext2_group_desc___next (char *command_line);
  394. extern void type_ext2_group_desc___prev (char *command_line);
  395. extern void type_ext2_group_desc___entry (char *command_line);
  396. extern void type_ext2_group_desc___show (char *command_line);
  397. extern void type_ext2_group_desc___inode (char *command_line);
  398. extern void type_ext2_group_desc___gocopy (char *command_line);
  399. extern void type_ext2_group_desc___blockbitmap (char *command_line);
  400. extern void type_ext2_group_desc___inodebitmap (char *command_line);
  401. extern void type_ext2_group_desc___setactivecopy (char *command_line);
  402.  
  403. /* blockbitmap_com.c */
  404.  
  405. extern void type_ext2_block_bitmap___show (char *command_line);
  406. extern void type_ext2_block_bitmap___entry (char *command_line);
  407. extern void type_ext2_block_bitmap___next (char *command_line);
  408. extern void type_ext2_block_bitmap___prev (char *command_line);
  409. extern void type_ext2_block_bitmap___allocate (char *command_line);
  410. extern void type_ext2_block_bitmap___deallocate (char *command_line);
  411. void allocate_block (long entry_num);
  412. void deallocate_block (long entry_num);
  413.  
  414. /* inodebitmap_bom.c */
  415.  
  416. extern void type_ext2_inode_bitmap___show (char *command_line);
  417. extern void type_ext2_inode_bitmap___entry (char *command_line);
  418. extern void type_ext2_inode_bitmap___next (char *command_line);
  419. extern void type_ext2_inode_bitmap___prev (char *command_line);
  420. extern void type_ext2_inode_bitmap___allocate (char *command_line);
  421. extern void type_ext2_inode_bitmap___deallocate (char *command_line);
  422. void allocate_inode (long entry_num);
  423. void deallocate_inode (long entry_num);
  424.  
  425. /* win.c */
  426.  
  427. extern WINDOW *title_win,*show_win,*command_win,*show_pad;
  428.  
  429. extern void init_windows (void);
  430. extern void refresh_title_win (void);
  431. extern void refresh_show_win (void);
  432. extern void refresh_show_pad (void);
  433. extern void refresh_command_win (void);
  434. extern void show_info (void);
  435. extern void redraw_all (void);
  436. extern void close_windows (void);
  437.  
  438. #endif /* EXT2ED_EDITOR_H */